package main

import (
	"fmt"

	"dingusxp/trial/test/cmd/chan/tree"
)

// Walk 遍历树 t，并树中所有的值发送到信道 ch。
func Walk(t *tree.Tree, ch chan int, level int) {
	if t.Left != nil {
		Walk(t.Left, ch, level+1)
	}
	ch <- t.Value
	if t.Right != nil {
		Walk(t.Right, ch, level+1)
	}
	// 遍历完成后关闭通道
	if level == 0 {
		close(ch)
	}
}

// Same 判断 t1 和 t2 是否包含相同的值。
func Same(t1, t2 *tree.Tree) bool {
	c1 := make(chan int)
	c2 := make(chan int)
	go Walk(t1, c1, 0)
	go Walk(t2, c2, 0)
	for v1 := range c1 {
		v2 := <-c2
		fmt.Printf("v1: %d, v2: %d\n", v1, v2)
		if v1 != v2 {
			return false
		}
	}
	return true
}

func main() {
	fmt.Printf("Same? %v\n", Same(tree.Sample(1), tree.Sample(1)))
	fmt.Printf("Same? %v\n", Same(tree.Sample(1), tree.Sample(2)))
}
